package 函数式编程

/**
 * 假设需要分别计算从一个整数到另一个整数的“连加和”、“平方和”以及“2的幂次和”
 */
class HighFunction {
  /**
   * 不使用高阶函数
   * @param x
   * @return
   */
  def powerOfTwo(x: Int): Int = {
    if (x == 0) 1 else 2 * powerOfTwo(x - 1)
  }

  def sumInts(a: Int, b: Int): Int = {
    if (a > b) 0 else a + sumInts(a + 1, b)
  }

  def sumSquares(a: Int, b: Int): Int = {
    if (a > b) 0 else a * a + sumSquares(a + 1, b)
  }

  def sumPowersOfTwo(a: Int, b: Int): Int = {
    if (a > b) 0 else powerOfTwo(a) + sumPowersOfTwo(a + 1, b)
  }

  /**
   * 高阶函数
   * @param f
   * @param a
   * @param b
   * @return
   */
  def sum(f: Int => Int, a: Int, b: Int):Int = {
    if(a > b) 0 else f(a) + sum(f, a+1, b)
  }
}

